The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices that may be found in many different settings. Computer systems typically include a combination of hardware (e.g., semiconductors, circuit boards, etc.) and software (e.g., computer programs). As advances in semiconductor processing and computer architecture push the performance of the computer hardware higher, more sophisticated computer software has evolved to take advantage of the higher performance of the hardware, resulting in computer systems today that are much more powerful than just a few years ago. One significant advance in computer technology is the development of parallel processing, i.e., the performance of multiple tasks in parallel.
A number of computer software and hardware technologies have been developed to facilitate increased parallel processing. From a hardware standpoint, computers increasingly rely on multiple microprocessors to provide increased workload capacity. Furthermore, some microprocessors have been developed that support the ability to execute multiple threads in parallel, effectively providing many of the same performance gains attainable through the use of multiple microprocessors. From a software standpoint, multithreaded operating systems and kernels have been developed, which permit computer programs to concurrently execute in multiple threads, so that multiple tasks can essentially be performed at the same time.
In addition, some computers implement the concept of logical partitioning, where a single physical computer is permitted to operate essentially like multiple and independent virtual computers, referred to as logical partitions, with the various resources in the physical computer (e.g., processors, memory, and input/output devices) allocated among the various logical partitions via a partition manager, or hypervisor. Each logical partition executes a separate operating system, and from the perspective of users and the software applications executing in the logical partition, operates as a fully independent computer.
One way that physical resources are allocated to, and shared among, the logical partitions is through a concept known as virtual resources. For example, a virtual processor may be allocated to a logical partition. From the perspective of the logical partition, it has complete access to its virtual processor and may execute its operating system and applications on its virtual processor, at its discretion. But, unbeknownst to the logical partition, its virtual processor is actually implemented as fractional allocations of time slices of one or more physical processors, and these fractional allocations and physical processors may change over time.
When logical partitions share fractional portions of the available physical processors, the manner in which physical processors are allocated across the logical partitions can affect the performance of each logical partition. The operating systems that run within the logical partitions often provide tools to analyze the performance of their logical partition, but the analysis solely from the logical partition perspective is insufficient to understand the dynamics of the allocation of the physical processors across multiple logical partitions. Thus, analyzing the performance of a logically-partitioned computer system can be difficult because the performance data that is collected is organized and described in terms of the virtual processors. Current techniques attempt to address the aforementioned problems by adding additional instrumentation and data gathering to the underlying firmware and/or hardware of the logically-partitioned computer system, but these techniques can be costly and often degrade the overall performance of the computer system.
Hence, without a better technique for collecting performance data in logically-partition computer systems, users will continue to experience difficulty in performing performance analysis.